<?php

// 命名空间
namespace app\common\controller;

// 接收Controller底层控制器
use think\Controller;

// 让控制器Home继承Controller底层控制器
// Home为公共控制器
class Home extends Controller
{
    // 过滤掉一些不需要登录的方法
    public $NoLogin = [];

   
    public function __construct()
    {
        // 继承公共控制器
        parent::__construct();
        

        // 加载模型  如果不拿过来公共控制器，下面查询时会报错
        $this->BusinessModel = model('Business.Business');
       
        // $this->NoLogin是一个数组    
        
        // 如何获取当前我们所访问的控制器方法
        $action = $this->request->action();
        
        // in_array($action, $this->NoLogin); //在 就说明不用登录 不在就说明 需要登录
        //如果有 * 意味着 所有的方法都不需要登录
        //两个都不在数组中，就说明必须要登录了
        if(!in_array($action, $this->NoLogin) && !in_array("*",$this->NoLogin))
        {
            $this->IsLogin();
        }
    }



 
    /**
     * 判断是否登录
     * @param $redirect 重定向参数 true为默认跳转 false为不跳转
     * @return array 如果 redirect 为 false的时候， 就返回登录信息
     */
    public function IsLogin($redirect = true)
    {
        /*
        如何知道访问的地址是哪里？
         第一种，知道访问的是哪个模块，哪个控制器，哪个方法，就知道它的地址是哪里
        第二种，在thinkphp手册中查询获知，(请求/请求信息p138)
        */
        
        // 第一步 获取cookie id或者手机号不存在就给个0
        $busid = cookie('busid') ? trim(cookie('busid')) : 0;
        $mobile = cookie('mobile') ? trim(cookie('mobile')) : '';

        // var_dump($redirect);
        // exit;
        
        //返回上一个界面。三元运算符，空地址就重新获取
        $url = empty($url) ? $this->request->server('HTTP_REFERER') : $url;
        cookie('redirect', $url);

        // 有了地址，然后做跳转

        // 如果id或者手机号有一个不存在，就删除缓存。如果都存在，就保存到cookie仓库里面
        if(!$busid || empty($mobile))
        {
            cookie('busid',null);
            cookie('mobile',null);


            // 如果重定向redirect是true,给个非法登录;否则给个返回空
            if($redirect)
            {
                $this->error('请重新登录',url('home/index/login'));
                exit;
            }else
            {
                return null;
            }
        }
        
        // 第二步 查询用户是否存在 组装查询的条件
        $where = ['id' => $busid,'mobile' => $mobile];

      
        //  第三步 查询用户数据 放到条件里做判断
        $AutoLogin = $this->BusinessModel->where($where)->find();
        

        // 条件判断  当用户信息不存在 设为非法登录 删除cookie缓存
        if(!$AutoLogin)
        {
            //删除cookie
            cookie('busid',null);
            cookie('mobile',null);
            
            // 提醒完 自动跳转到登陆页面
            if($redirect)
            {
                $this->error('非法登录',url('home/index/login'));
                exit;
            }else
            {
                return null;
            }
           
        }
        // 将数据赋值到模板上去
        $this->view->assign('AutoLogin',$AutoLogin);
        return $AutoLogin;
    }
}
